home *** CD-ROM | disk | FTP | other *** search
/ PC Home 138 / PC Home issue 138.iso / Software / Essentials / Netscape / nim.xpi / install.js
Encoding:
JavaScript  |  2003-02-08  |  11.4 KB  |  373 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment("File to delete: " + fFileToDelete);
  31.   if(File.isFile(fFileToDelete))
  32.   {
  33.     File.remove(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder if it exists
  41. function deleteThisFolder(dirKey, folder, recursiveDelete)
  42. {
  43.   var fToDelete;
  44.  
  45.   if(typeof recursiveDelete == "undefined")
  46.     recursiveDelete = true;
  47.  
  48.   fToDelete = getFolder(dirKey, folder);
  49.   logComment("folder to delete: " + fToDelete);
  50.   if(File.isDirectory(fToDelete))
  51.   {
  52.     File.dirRemove(fToDelete, recursiveDelete);
  53.     return(true);
  54.   }
  55.   else
  56.     return(false);
  57. }
  58.  
  59. // OS type detection
  60. // which platform?
  61. function getPlatform()
  62. {
  63.   var platformStr;
  64.   var platformNode;
  65.  
  66.   if('platform' in Install)
  67.   {
  68.     platformStr = new String(Install.platform);
  69.  
  70.     if (!platformStr.search(/^Macintosh/))
  71.       platformNode = 'mac';
  72.     else if (!platformStr.search(/^Win/))
  73.       platformNode = 'win';
  74.     else
  75.       platformNode = 'unix';
  76.   }
  77.   else
  78.   {
  79.     var fOSMac  = getFolder("Mac System");
  80.     var fOSWin  = getFolder("Win System");
  81.  
  82.     logComment("fOSMac: "  + fOSMac);
  83.     logComment("fOSWin: "  + fOSWin);
  84.  
  85.     if(fOSMac != null)
  86.       platformNode = 'mac';
  87.     else if(fOSWin != null)
  88.       platformNode = 'win';
  89.     else
  90.       platformNode = 'unix';
  91.   }
  92.  
  93.   return platformNode;
  94. }
  95.  
  96. function IsRestrictedAccess()
  97. {
  98.   /* This will check to see if the user has restricted access or not.
  99.    * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  100.    * it is, then access is not restricted.  This is only used to
  101.    * determine which Desktop, Programs, and Start Menu folders
  102.    * are to used: common or per user
  103.    *
  104.    * Requirement: The global variable "gWinReg" is assumed to be set already and
  105.    *              and to be pointing to the Windows Registry
  106.    */
  107.  
  108.   var ikwDefined;
  109.  
  110.   ikwDefined = typeof(gWinReg.isKeyWritable);
  111.   logComment("gWinReg.isKeyWritable(): " + ikwDefined);
  112.   if(ikwDefined == "function")
  113.   {
  114.     gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  115.     if(!gWinReg.isKeyWritable("SOFTWARE"))
  116.       return true;
  117.   }
  118.  
  119.   return false;
  120. }
  121.  
  122. function IsWinnt()
  123. {
  124.   /* Determines if the script is running under NT or not.
  125.    *
  126.    * Requirement: The global variable "gWinReg" is assumed to be set already and
  127.    *              and to be pointing to the Windows Registry
  128.    */
  129.   var subkey;
  130.   var valname;
  131.   var szCurrentVersion;
  132.  
  133.   gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  134.   subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  135.   valname             = "CurrentVersion";
  136.   szCurrentVersion    = gWinReg.getValueString(subkey, valname);
  137.   logComment("szCurrentVersion: " + szCurrentVersion);
  138.   if((szCurrentVersion == "") || (szCurrentVersion == null))
  139.   {
  140.     return false;
  141.   }
  142.   else
  143.   {
  144.     return true;
  145.   }
  146. }
  147.  
  148. function createShortcuts() 
  149. {
  150.   var subkey;
  151.   var valname;
  152.   var szStartMenuPrograms;
  153.   var szFolderDesktop;
  154.   var szFolderSendTo;
  155.   var szFolderAppData;
  156.   var fWindows;
  157.   var fTemp;
  158.   var fProgram;
  159.   var fDefShortcuts;
  160.   var fileExe;
  161.   var fileNimIcon;
  162.   var scNimDesc;
  163.   var scNimParam;
  164.   var scFolderName;
  165.   var fFolderDesktop;
  166.   var fFolderPath;
  167.   var fFolderPathStr;
  168.   var szCurrentVersion;
  169.   var bTurboSet;
  170.  
  171.   fWindows             = getFolder("Windows");
  172.   fProgram             = getFolder("Program");
  173.   fDefShortcuts        = getFolder("Program","defaults/shortcuts");
  174.   fTemp                = fProgram + "Netscp.exe";
  175.   fileExe              = getFolder("Program", "Netscp.exe");
  176.   fileNimIcon          = getFolder("Chrome", "icons/default/AimApplication.ico");
  177.   scNimDesc            = "Instant Messenger";
  178.   scNimParam              = "-aim";
  179.   scFolderName         = "Netscape 7.0";
  180.   if(gWinReg != null) 
  181.   {
  182.  
  183.     if(!gIsWinnt || gRestrictedAccess)
  184.     {
  185.       gWinReg.setRootKey(gWinReg.HKEY_CURRENT_USER);
  186.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  187.       valname             = "Programs";
  188.       szStartMenuPrograms = gWinReg.getValueString(subkey, valname);
  189.       valname             = "Desktop";
  190.       szFolderDesktop     = gWinReg.getValueString(subkey, valname);
  191.     }
  192.     else
  193.     {
  194.       gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  195.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  196.       valname             = "Common Programs";
  197.       szStartMenuPrograms = gWinReg.getValueString(subkey, valname);
  198.       valname             = "Common Desktop";
  199.       szFolderDesktop     = gWinReg.getValueString(subkey, valname);
  200.     }
  201.  
  202.     gWinReg.setRootKey(gWinReg.HKEY_CURRENT_USER);
  203.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  204.     valname             = "SendTo";
  205.     szFolderSendTo      = gWinReg.getValueString(subkey, valname);
  206.  
  207.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  208.     valname             = "AppData";
  209.     szFolderAppData     = gWinReg.getValueString(subkey, valname);
  210.  
  211.     subkey              = "SOFTWARE\\Netscape\\Netscape\\7.02 (en)\\Main";
  212.     valname             = "Program Folder Path";
  213.     fFolderPathStr      = gWinReg.getValueString(subkey, valname);
  214.     if((fFolderPathStr == "") || (fFolderPathStr == null))
  215.     {
  216.       fTemp       = szStartMenuPrograms + "\\" + scFolderName;
  217.       fFolderPath = getFolder("file:///", fTemp);
  218.     }
  219.     else
  220.     {
  221.       /* convert the path string to a path folder object */
  222.       fFolderPath = getFolder("file:///", fFolderPathStr);
  223.     }
  224.     /* convert the path string to a path folder object */
  225.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  226.  
  227.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  228.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  229.     logComment("Folder FolderSendTo     : " + szFolderSendTo);
  230.     logComment("fileExe                 : " + fileExe);
  231.     logComment("fFolderPath             : " + fFolderPath);
  232.     logComment("fProgram                : " + fProgram);
  233.  
  234.     /* explicitly create the fFolderPath even though the windowsShortcut function creates the folder.
  235.      * This is so that the folder creation gets logged for uninstall to remove it. */
  236.     if(!File.exists(fFolderPath))
  237.       File.dirCreate(fFolderPath);
  238.  
  239.     if(!File.exists(fDefShortcuts))
  240.       File.dirCreate(fDefShortcuts);
  241.  
  242.     /* create the shortcuts */
  243.     File.windowsShortcut(fileExe, fFolderDesktop, scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  244.     File.windowsShortcut(fileExe, fDefShortcuts,  scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  245.     File.windowsShortcut(fileExe, fFolderPath,    scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  246.  
  247.     // Register as a windows XP messenger
  248.     if( gIsWinnt ) // find a way to see if it is only WINXP
  249.     {
  250.        gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  251.  
  252.        gWinReg.createKey("Software\\Clients\\IM\\Netscp.exe","");
  253.  
  254.        subkey = "Software\\Clients\\IM\\Netscp.exe";
  255.        valname = "";
  256.        data = "AOL Instant Messenger (Netscape 7.0)";
  257.        gWinReg.setValueString(subkey, valname, data);
  258.  
  259.        subkey = "Software\\Clients\\IM\\Netscp.exe\\DefaultIcon";
  260.        gWinReg.createKey(subkey,"");
  261.        valname = "";
  262.        data = fProgram + "chrome\\icons\\default\\AimApp.ico,0"
  263.        gWinReg.setValueString(subkey, valname, data);
  264.  
  265.        gWinReg.createKey("Software\\Clients\\IM\\Netscp.exe\\InstallInfo","");
  266.  
  267.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  268.        valname = "HideIconsCommand";
  269.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.02 (en)\" /hs aim";
  270.        gWinReg.setValueString(subkey, valname, data);
  271.  
  272.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  273.        valname = "IconsVisible";
  274.        gWinReg.setValueNumber(subkey, valname, 1);
  275.  
  276.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  277.        valname = "ReinstallCommand";
  278.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.02 (en)\" /sd IM";
  279.        gWinReg.setValueString(subkey, valname, data);
  280.  
  281.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  282.        valname = "ShowIconsCommand";
  283.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.02 (en)\" /ss aim";
  284.        gWinReg.setValueString(subkey, valname, data);
  285.     }
  286.   }
  287.   else
  288.   {
  289.     logComment("gWinReg is null");
  290.   }
  291. }
  292.  
  293. function upgradeCleanup()
  294. {
  295.   // Obsolete files from previous Netscape installations that
  296.   // need to be cleaned up.
  297.   deleteThisFile("Program",    "Cool/CoolUtils.dll");
  298. }
  299.  
  300. // main
  301. var srDest;
  302. var err;
  303. var communicatorFolder;
  304. var gWinReg;
  305. var gIsWinnt;
  306. var gRestrictedAccess;
  307.  
  308.  
  309. srDest = 1761;
  310. err    = initInstall("Netscape Instant Messenger", "Netscape/Instant Messenger", "7.0.2.2003020809"); 
  311. logComment("initInstall: " + err);
  312.  
  313. communicatorFolder = getFolder("Program");
  314. logComment("communicatorFolder: " + communicatorFolder);
  315.  
  316. if(verifyDiskSpace(communicatorFolder, srDest))
  317. {
  318.   setPackageFolder(communicatorFolder);
  319.  
  320.   target = getFolder("Program", "Xpcs Registry.dat");
  321.   if (File.exists(target) > 0)
  322.   {
  323.       var rmErr = File.remove(target);
  324.       logComment("File.remove of " + target + " returned: " + rmErr);
  325.   }
  326.  
  327.   upgradeCleanup();
  328.   err = addDirectory("",
  329.                      "7.0.2.2003020809",
  330.                      "bin",              // dir name in jar to extract 
  331.                      communicatorFolder, // Where to put this file (Returned from getFolder) 
  332.                      "",                 // subdir name to create relative to communicatorFolder
  333.                      true );             // Force Flag 
  334.   logComment("addDirectory() returned: " + err);
  335.  
  336.   gWinReg = getWinRegistry();
  337.   if(gWinReg && (err == SUCCESS)) 
  338.   {
  339.     // The functions within this if loop all depend upon the global variables
  340.     //    gWinReg, gRestrictedaccess and gIsWinnt being set correctly.
  341.  
  342.     gRestrictedAccess = IsRestrictedAccess();
  343.     logComment("gRestrictedAccess value: " + gRestrictedAccess);
  344.     gIsWinnt = IsWinnt();
  345.     logComment("gIsWinnt value: " + gIsWinnt);
  346.  
  347.     createShortcuts();
  348.  
  349.     resetError();
  350.   }
  351.   else
  352.   {
  353.     logComment("gWinReg is null");
  354.   }
  355.  
  356.   registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","aim.jar"),"content/aim/");
  357.   registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","aim.jar"),"content/aim-region/");
  358.  
  359.   // check return value
  360.   err = getLastError();
  361.   if(!err)
  362.   {
  363.     err = performInstall(); 
  364.     logComment("performInstall() returned: " + err);
  365.   }
  366.   else
  367.     cancelInstall(err);
  368. }
  369. else
  370.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  371.  
  372. // end main
  373.